package com.thm.tfast.modules.sys.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.thm.tfast.modules.sys.model.SysRole;
import com.thm.tfast.modules.sys.model.dto.role.RoleInsertDto;
import com.thm.tfast.modules.sys.model.dto.role.RoleMenuDto;
import com.thm.tfast.modules.sys.model.dto.role.RolePermissionDto;
import com.thm.tfast.modules.sys.model.dto.role.RoleUpdateDto;
import com.thm.tfast.modules.sys.model.vo.role.RoleVo;

import java.util.List;

/**
 * <p>
 * 角色信息表 服务类
 * </p>
 *
 * @author THM
 * @since 2022-10-10
 */
public interface SysRoleService extends IService<SysRole> {
    /**
     * 通过用户ID获取角色集合
     * @param userId 用户ID
     * @return 角色集合
     */
    List<RoleVo> getRolesByUserId(Long userId);

    /**
     * 根据角色名称分页获取用户列表
     * @param keyword 关键字：角色名称
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return
     */
    Page<SysRole> page(String keyword, Integer pageNum, Integer pageSize);

    /**
     * 新增角色信息
     * @param dto 角色信息
     * @return 角色ID
     */
    Long insert(RoleInsertDto dto);

    /**
     * 修改角色信息
     * @param dto 角色信息
     * @return true false
     */
    boolean update(RoleUpdateDto dto);

    /**
     * 禁用或者启用用户
     * @param roleId 角色ID
     * @return true false
     */
    boolean enableOrDisable(Long roleId);

    /**
     * 删除角色信息
     * @param roleId 角色ID
     * @return true false
     */
    boolean delete(Long roleId);

    /**
     * 分配角色菜单
     * @param dto 参数
     * @return true false
     */
    boolean allotMenu(RoleMenuDto dto);

    /**
     * 分配角色权限
     * @param dto 参数
     * @return true false
     */
    boolean allotPermission(RolePermissionDto dto);
}
